/* $Id:stat.h $ */
/*
   Copyright (C) 2007 by Jurjen Stellingwerff <jurjen@stwerff.xs4all.nl>
   Part of the Moros Project http://moros.sourceforge.net/

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 3.
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY.

   See the COPYING file for more details.
*/

#ifndef __STAT_H
#define __STAT_H

#include <string>
#include <map>
#include <list>
using namespace std;



class stat {
    string name;
    int type;
    string description;
public:
    stat();

    // Field : name
    const string getName() const;
    void setName(const string v);

    // Field : type
    enum type_enum{type_item,type_person,type_unit,type_all};
    const int getType() const;
    const string showType() const;
    void setType(const int v);
    void setType(const string v);

    // Field : description
    const string getDescription() const;
    void setDescription(const string v);

    void save(class channel &ch);
    void load(class channel &ch);
    void xml(ofstream &f, int l=0, int r=0);
};

// Repository

#define loopStats(v) loopMap(stat_repo.listStat(),v,class stat)

class statRepository {
    map<string,stat> stats;
public:
    class stat& getStat(const string v);
    void setStat(class stat& v);
    map<string,class stat>& listStat();
    void delStat(const string v);
    const bool isStat(const string v) const;
    multimap<string, sigc::signal<void, class stat& > > relations;
    bool load(class channel &ch);
    void save(class channel &ch);
};

extern statRepository stat_repo;

#endif // __STAT_H
